[Talend] DBからデータを抽出してS3へPutする
データ分析基盤構築においてありがちな連携パターンのサンプルジョブですが、作ってみました。
使用した環境
ジョブをデザインする
流れとしては
- MySQLへのコネクションコンポーネント( tMysqlConnection )
- MySQLからデータを抽出するコンポーネント( tMysqlInput )
- クエリ結果をファイルに書き出すコンポーネント( tFileoutputDelimited )
- S3へのコネクションコンポーネント( tS3Connection )
- S3へファイルを配置するコンポーネント( tS3Put )
この5つのコンポーネントを使用してジョブを作成します。 エラー処理とかも本来は必要ですが、ここでは割愛して正常系のみを想定して作成します。
ジョブを作成する
1.まずは各コンポーネントをペインにドラッグ&ドロップで配置します。
2.配置したあとは処理の流れを想定して、コンポーネントの位置を整えます(見栄え良くコンポーネントを配置する)
4.tMysqlConnectionのプロパティを設定します。
5.tMysqlInputのプロパティを設定します。 『既存の接続を使用』にチェックし、tMysqlConnection_1が選択されていることを確認し、select対象のテーブル名を指定します。 あとはクエリを書いて終了です。(ここでは全件を取得する "select * from customers" にします。)
6.tFileOutputDelimitedでファイルを書き出すためのスキーマを定義する
書き出すファイルの位置と区切り文字や改行コード及びヘッダーを含む等を適切に指定します。
次にMySQL上のcumtomersテーブルのデータを確認します。(customersテーブルは下記のような感じで作成しています)
上記のテーブルのデータをファイルに書き出したいのでtFileOutputDelimitedの『スキーマの編集』で定義します。
入力スキーマで定義が終わったら全選択後、オレンジ枠で囲んでいる部分の矢印クリックで出力スキーマにコピーし、最後にOKをクリックします。
7.tS3Connectionのプロパティを設定します。
Access Key と Secret Key を適切なもので設定します。
8.tS3Putのプロパティを設定します。
※しばらく使ってないといつも Key に指定するのってなんだっけ?ってなるのですが、S3にPutする時のファイル名を指定します。
これでジョブ作成は完了です。
tMysqlInputコンポーネントでビックリマークが出てる場合は
のようにスキーマ編集でDBタイプを指定すればビックリマークが消えると思います。
実行してみる
実行してみます。
エラーもなく実行が終わったので、S3にファイルがアップされているかを確認します。
問題なくS3へファイルがアップされていることが確認できました。
まとめ
基本的にはRedshiftにロードする場合はS3経由が前提となりますので、必要に応じてtFileOutputDelimitedのプロパティにてUTF8への文字コードで書き出しを行う必要がありますしファイルを圧縮する方が効率が良いので、必要に応じてプロパティで『zipファイルに圧縮』にチェックすることも必要になりますが、基本はDBから抽出しS3へアップロード、copyコマンドでRedshiftへロードという流れは変わりませんので、ちょっと検証とかで試してみたいとかであれば使えるかなとは思います。